home *** CD-ROM | disk | FTP | other *** search
- OPT MODULE, REG = 5
- OPT EXPORT
-
- MODULE '*mv_consts', 'exec/memory',
- 'dos/dos', 'dos/datetime',
- 'xfdmaster', 'libraries/xfdmaster'
-
-
- PROC unpack(filename,textlist) HANDLE
-
- DEF bufinf : PTR TO xfdbufferinfo,
- status = TRUE,
- succ = FALSE,
- mem = FALSE,
- len = FALSE,
- mem2 = FALSE,
- len2 = FALSE
-
- xfdmasterbase := OpenLibrary('xfdmaster.library',38)
-
- IF xfdmasterbase
- bufinf := XfdAllocObject(XFDOBJ_BUFFERINFO)
- IF bufinf
- mem,len := readfile(filename,textlist)
- bufinf.sourcebuffer := mem
- bufinf.sourcebuflen := len
- IF XfdRecogBuffer(bufinf)
- IF (bufinf.packerflags AND (XFDPFF_PASSWORD OR XFDPFF_KEY16 OR XFDPFF_KEY32))
- Raise(ERR_PASS_KEY)
- ENDIF
- bufinf.targetbufmemtype := MEMF_PUBLIC
- IF XfdDecrunchBuffer(bufinf)
- len2 := bufinf.targetbufsavelen
- mem2 := bufinf.targetbuffer
- StringF(filename,'T:MultiView_tmp_\d',Abs(time()))
- writefile(filename,mem2,len2,textlist)
- ELSE
- Raise(ERR_NO_DECRUNCH)
- ENDIF
- ELSE
- status := FALSE
- mem := FALSE
- ENDIF
- ELSE
- Raise(ERR_ALLOC)
- ENDIF
- ELSE
- bufinf := FALSE
- Raise(ERR_NO_XFD)
- ENDIF
-
- EXCEPT DO
-
- IF mem THEN Dispose(mem)
- IF mem2 THEN FreeMem(mem2,len2)
- IF bufinf THEN XfdFreeObject(bufinf)
- IF xfdmasterbase THEN CloseLibrary(xfdmasterbase)
-
- IF exception
- status := FALSE
- SELECT exception
- CASE ERR_EXIT
- RETURN
- DEFAULT
- IF exception < 19
- request(textlist[MSG_INFO_TITLE],textlist[exception])
- ELSE
- request(textlist[MSG_INFO_TITLE],textlist[ERR_UNKNOWN])
- ENDIF
- ENDSELECT
- ENDIF
-
- ENDPROC status
-
- PROC time()
-
- DEF dt : datetime,
- ds : PTR TO datestamp
-
- ds := DateStamp(dt.stamp)
-
- ENDPROC ds.days*ds.minute*ds.tick
- PROC readfile(filename : PTR TO CHAR, textlist) HANDLE
-
- DEF file,
- len,
- mem
-
- file := Open(filename,OLDFILE)
- IF file
- Seek(file,NIL,OFFSET_END)
- len := Seek(file,NIL,OFFSET_BEGINNING)
- mem := New(len)
- IF mem
- Read(file,mem,len)
- ELSE
- Raise(ERR_NO_MEM)
- ENDIF
- ELSE
- Raise(ERR_OPEN)
- ENDIF
-
- EXCEPT DO
-
- IF file THEN Close(file)
-
- IF exception
- mem := NIL
- len := NIL
- ReThrow()
- ENDIF
-
- ENDPROC mem,len
- PROC writefile(filename : PTR TO CHAR, mem, len, textlist) HANDLE
-
- DEF ilosc,
- file
-
- file := Open(filename,NEWFILE)
- IF file
- ilosc := Write(file,mem,len)
- IF ilosc <> len
- Raise(ERR_SAVE)
- ENDIF
- ELSE
- Raise(ERR_OPEN)
- ENDIF
-
- EXCEPT DO
-
- IF file THEN Close(file)
- IF exception
- ReThrow()
- ENDIF
-
- ENDPROC
-
-
-